package org.leigao.java.web;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

// ActionSupport 类是一个工具类，它已经实现了 Action 接口。除此之外，它还实现了
// Validatable 接口，提供数据校验功能。
// 在 Validatable 接口中，定义了一个 validate() 方法，重写该方法，如果校验表单
// 输入域出现错误，则将错误添加到 ActionSupport 类的 fieldErrors 域中，然后通过
// OGNL 表达式负责输出。


// Struts2 的 Action 类就是一个普通的 Java 类； 
public class LoginAction extends ActionSupport //implements MyActionInterface
{
    /**
     * 
     */
    private static final long serialVersionUID = 8524498510685676667L;
    
    
    // 下面是 Action 类部用于封装用户请求参数的两个属性； 
    private String username; 
    private String password; 
    
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }

    
    // 处理用户请求的 execute 方法； 
    public String execute() throws Exception
    {
        if(getUsername().equals("scott") &&
                getPassword().equals("tiger"))
        {
            // 通过 ActionContext 对象访问 Web 应用的 Session； 
            ActionContext.getContext().getSession().put("user", getUsername()); 
            
            return SUCCESS; 
        }
        else
        {
            return ERROR; 
        }
    }
    
    
    // 完成输入校验需要重写 validate 方法； 
    public void validate()
    {
        if(null == getUsername() || getUsername().trim().equals(""))
        {
            // 添加表单校验错误；
            // 在校验失败后，系统能将系统转入 input 处。
            addFieldError("username", getText("user.required")); 
        }
        
        if(null == getPassword() || getPassword().trim().equals(""))
        {
            // ActionSupport 提供了国际化能力，调用 getText() 方法从资源文件中
            // 获取国际化信息。
            addFieldError("password", getText("pass.required")); 
        }
    }

}
